package com.oig.sys.msg.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.oig.common.constants.CommonEnum;
import com.oig.common.exception.BadRequestException;
import com.oig.sys.msg.constants.MsgEnums;
import com.oig.sys.msg.dao.ITbExportTaskDao;
import com.oig.sys.msg.dto.ExportTaskDto;
import com.oig.sys.msg.entity.TbExportTask;
import com.oig.sys.msg.service.ITbExportTaskService;
import com.oig.sys.msg.vo.ExportTaskVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * @author wuxl
 */
@Service
public class TbExportTaskServiceImpl implements ITbExportTaskService {

	private final ITbExportTaskDao tbExportTaskDao;

	@Autowired
	public TbExportTaskServiceImpl(ITbExportTaskDao tbExportTaskDao){
		 this.tbExportTaskDao = tbExportTaskDao;
	}

	@Transactional
	@Override
	public ExportTaskVo addExportTask(ExportTaskDto exportTaskDto){
		TbExportTask exportTask = new TbExportTask();
		BeanUtil.copyProperties(exportTaskDto, exportTask, "id");
		exportTask.setStatus(MsgEnums.ExportTaskStatus.CREATE_FILE.getCode());
		exportTask.setDelFlag(CommonEnum.FlagEnum.FALSE_FLAG.getCode());
		this.tbExportTaskDao.save(exportTask);
		ExportTaskVo taskVo = new ExportTaskVo();
		BeanUtil.copyProperties(exportTask, taskVo);
		return taskVo;
	}


	@Transactional
	@Override
	public ExportTaskVo updateTaskAndNotify(ExportTaskDto exportTaskDto){
		TbExportTask exportTask = this.tbExportTaskDao.getExportTaskById(exportTaskDto.getId()) ;
		if (exportTask==null){
			throw new BadRequestException("任务不存在") ;
		}
		BeanUtil.copyProperties(exportTaskDto, exportTask,"createUserId","createUserName","tenantId","tenantName");
		exportTask.setStatus(MsgEnums.ExportTaskStatus.FILE_OK.getCode());
		this.tbExportTaskDao.save(exportTask);
		ExportTaskVo taskVo = new ExportTaskVo();
		BeanUtil.copyProperties(exportTask, taskVo);
		return taskVo;
	}

	@Transactional
	@Override
	public Integer findUnDownSizeByUserId(Integer userId) {
		return this.tbExportTaskDao.findUnDownSizeByUserId(userId);
	}

	@Transactional
	@Override
	public ExportTaskVo updateDown(Integer taskId) {
		TbExportTask exportTask = this.tbExportTaskDao.getExportTaskById(taskId);
		if (StringUtils.isBlank(exportTask.getFileId())){
			throw new BadRequestException("文件不存在") ;
		}
		exportTask.setStatus(MsgEnums.ExportTaskStatus.FILE_DOWN.getCode());
		exportTask.setLastDownloadTime(new Date());
		this.tbExportTaskDao.save(exportTask);
		ExportTaskVo taskVo = new ExportTaskVo();
		BeanUtil.copyProperties(exportTask, taskVo);
		return taskVo;
	}

	@Transactional
	@Override
	public void calExportTask(List<Integer> taskIdList, Integer userId) {
		int n = this.tbExportTaskDao.countByUserId(taskIdList, userId);
		if (taskIdList.size()!=n){
			throw new BadRequestException("id错误") ;
		}
		this.tbExportTaskDao.updateDelByIdList(taskIdList);
	}
}
